# -*- coding: utf-8 -*-
#autor 5312
#obs.: 2º Parte do trabalho (estatistica)

import sqlite3

import matplotlib.pyplot as plt


#metodo de pesquisa na base de bados ano e ipc global
#returna dados (@data1)
def loadListIpc_Global():

    #ligação a base de dados
    conn = sqlite3.connect('IPC_Portugal.db')
    cursor = conn.cursor()

    #executa na bases dados os campos que pede e selecciona os dados todos
    cursor.execute("Select Ano,Ipc_Global from Dados ")
    data1=cursor.fetchall() 

    #fecho da ligação
    cursor.close 
    return data1



#metodo de pesquisa na base de bados ano e taxa inflação
#returna dados (@data1)    
def loadListTaxa_Inflacao():

    #ligação a base de dados
    conn = sqlite3.connect('IPC_Portugal.db')
    cursor = conn.cursor()

    #executa na bases dados os campos que pede e selecciona os dados todos
    cursor.execute("Select Ano,Taxa_Inflacao from Dados ")
    data1=cursor.fetchall()

    #fecho da ligação
    cursor.close 
    return data1   

#metodo de pesquisa na base de bados ano e Remuneração minima
#returna dados (@data1)       
def loadListRemuneracao_Minima():

    #ligação a base de dados
    conn = sqlite3.connect('IPC_Portugal.db')
    cursor = conn.cursor()

    #executa na bases dados os campos que pede e selecciona os dados todos
    cursor.execute("Select Ano,Remuneracao_Minima from Dados ")
    data1=cursor.fetchall()

    #fecho da ligação
    cursor.close 
    return data1     

#metodo de pesquisa na base de bados ano e Remuneração Máxima
#returna dados (@data1)   
def loadListRemuneracao_Maxima():

    #ligação a base de dados
    conn = sqlite3.connect('IPC_Portugal.db')
    cursor = conn.cursor()

    #executa na bases dados os campos que pede e selecciona os dados todos
    cursor.execute("Select Ano,Remuneracao_Maxima from Dados ")
    data1=cursor.fetchall()

    #fecho da ligação
    cursor.close
    return data1

#metodo de pesquisa na base de bados ano,ipc global,remuneracao minima e remuneracao maxima
#returna dados (@data1)
def loadList_evolucao():

    #ligação a base de dados
    conn = sqlite3.connect('IPC_Portugal.db')
    cursor = conn.cursor()

    #executa na bases dados os campos que pede e selecciona os dados todos
    cursor.execute("Select Ano,Ipc_Global,Remuneracao_Minima,Remuneracao_Maxima from Dados ")
    data1=cursor.fetchall() 

    #fecho da ligação
    cursor.close 
    return data1

#metodo de pesquisa na base de bados ano e PIB percapita
#returna dados (@data1) 
def loadListPib_Percapita():

    #ligação a base de dados
    conn = sqlite3.connect('IPC_Portugal.db')
    cursor = conn.cursor()

    #executa na bases dados os campos que pede e selecciona os dados todos
    cursor.execute("Select Ano,Pib_Percapita from Dados ")
    data1=cursor.fetchall()

    #fecho da ligação
    cursor.close
    return data1

#metodo de pesquisa na base de bados ano e Rendimento Nacional
#returna dados (@data1) 
def loadListRendimento_Nacional():

    #ligação a base de dados
    conn = sqlite3.connect('IPC_Portugal.db')
    cursor = conn.cursor()

    #executa na bases dados os campos que pede e selecciona os dados todos
    cursor.execute("Select Ano,Rendimento_Nacional from Dados ")
    data1=cursor.fetchall()

    #fecho da ligação
    cursor.close
    return data1

#metodo de pesquisa na base de bados ano e Rendimento Disponível
#returna dados (@data1) 
def loadListRendimento_Disponivel():

    #ligação a base de dados
    conn = sqlite3.connect('IPC_Portugal.db')
    cursor = conn.cursor()

    #executa na bases dados os campos que pede e selecciona os dados todos
    cursor.execute("Select Ano,Rendimento_Disponivel from Dados ")
    data1=cursor.fetchall()

    #fecho da ligação
    cursor.close
    return data1

#metodo de pesquisa na base de bados ano e Rendimento Percapita
#returna dados (@data1) 
def loadListRemuneracao_Percapita():

    #ligação a base de dados
    conn = sqlite3.connect('IPC_Portugal.db')
    cursor = conn.cursor()

    #executa na bases dados os campos que pede e selecciona os dados todos
    cursor.execute("Select Ano,Remuneracao_Percapita from Dados ")
    data1=cursor.fetchall()

    #fecho da ligação
    cursor.close
    return data1 


#metodo para mostrar graficos do ipc com os dados da base de dados
#param @ipc
def getGraficoIPC(ipc):

    #selecciona o campo x[0] e corre todas as linhas da lista ipc que contem ano
    year = [x[0] for x in ipc ]

    #selecciona o campo x[1] e corre todas as linhas da lista ipc que contem indice
    indice = [y[1] for y in ipc]

    #criacao do grafico com os dados posteriores
    plt.plot(year,indice)

    #criação dos nomes da labels 
    plt.xlabel('Ano')
    plt.ylabel('Ipc')

    #criação do titulo para o gráfico
    plt.title('Grafico IPC')

    #cria uma grelha atrás do grafico
    plt.grid(True)

    #mostra o gráfico
    plt.show()

#metodo para mostrar graficos da inflção com os dados da base de dados
#param @taxa
def getGraficoInflacao(taxa):
    
    #selecciona o campo i[1] e corre todas as linhas da lista taxa que contem inflação
    inflacao = [i[1] for i in taxa]

    #na lista taxa  o 1º campo está vazio por isso inicializa-se a 0.0
    inflacao[0] = 0.0

    #criacao do grafico com os dados posteriores
    plt.plot([i[0] for i in taxa],inflacao)

    #criação dos nomes da labels 
    plt.xlabel('Ano')
    plt.ylabel('Taxa')
    
    #criação do titulo para o gráfico
    plt.title('Grafico Inflacao')

    #cria uma grelha atrás do grafico
    plt.grid(True)

    #mostra o gráfico
    plt.show()

#metodo para mostrar graficos da Remunaração minima com os dados da base de dados
#param @Rm
def getGraficoRemuneracaoMinima(Rm):

    #selecciona o campo i[1] e corre todas as linhas da lista Rm que contem remuneração minima 
    Rem = [i[1] for i in Rm]
    
    #na lista Rm  o 36º campo está vazio é igual anterior 485.0
    Rem[36]=485.0
    
    #criacao do grafico com os dados posteriores
    plt.plot([i[0] for i in Rm],Rem)

    #criação dos nomes da labels 
    plt.xlabel('Ano')
    plt.ylabel('Remuneracao Minima')

    #criação do titulo para o gráfico
    plt.title('Grafico R M')

    #cria uma grelha atrás do grafico
    plt.grid(True)

    #mostra o gráfico
    plt.show()

#metodo para mostrar graficos da Remunaração máxima com os dados da base de dados
#param @Rmax
def getGraficoRemuneracao_Maxima(Rmax):

    #selecciona o campo i[1] e corre todas as linhas da lista Rmax que contem remuneração máxima
    Rema = [i[1] for i in Rmax]

    #na lista Rm  o 36º campo está vazio é igual anterior 3364.1
    Rema[36] = 3364.1

    #criacao do grafico com os dados posteriores
    plt.plot([i[0] for i in Rmax],Rema)

    #criação dos nomes da labels 
    plt.xlabel('Ano')
    plt.ylabel('Remuneracao Maxima')

    #criação do titulo para o gráfico
    plt.title('Grafico R Max')

    #cria uma grelha atrás do grafico
    plt.grid(True)

    #mostra o gráfico
    plt.show()

#metodo para mostrar graficos da Remunaração minima e máxima com os dados da base de dados
#param @Rm
#param @Rmax
def getGraficoMaxMin(ipcRmRm):
    
    #selecciona o campo i[1] e corre todas as linhas da lista Rm que contem remuneração minima
    lista1=[]
    lista2=[]
    listat=[]
    listat2=[]
    #ipcRmRm contem o ano,ipc, remuneracao minima e maxima
   
    for test in ipcRmRm:
        ipc0=test[1]
        rm=test[2]
        lista1.append((ipc0,rm))

    lista1[36]=(1938.3,485.0)

    for test2 in lista1:
        listat.append(test2[1] / test2[0])

    
    for test in ipcRmRm:
        ipc0=test[1]
        rmax=test[3]
        lista2.append((ipc0,rmax))

    
    lista2[36]=(1938.3,3364.1)
    for test2 in lista2:
        listat2.append(test2[1] / test2[0])
        
      
   
    
    #selecciona o campo i[1] e corre todas as linhas da lista Rmax que contem remuneração máxima
    #Rema = [i[1] for i in Rmax]
    #Rema[36] = 3364.1

    #criacao do grafico com os dados posteriores da remunercação minima
    plt.plot([i[0] for i in ipcRmRm],listat,label="R Minimo")

    #criacao do grafico com os dados posteriores da remunercação máxima
    plt.plot([i[0] for i in ipcRmRm],listat2,label="R Maximo")

    #criação dos nomes da labels    
    plt.xlabel('Ano')
    plt.ylabel('Remuneracao Maxima')
    plt.ylabel('Remuneracao Minima')

    #criação do titulo para o gráfico
    plt.title('Grafico R Max e Min')

    #legendas para o gráfico
    plt.legend()

    #cria uma grelha atrás do grafico
    plt.grid(True,color='g')

    #mostra o gráfico
    plt.show()

#metodo para mostrar graficos da pib percapita com os dados da base de dados
#param @Pib_per   
def getGraficoPib_Percapita(Pib_per):

    #selecciona o campo i[1] e corre todas as linhas da lista Rm que contem pib percapita
    Pib_percapita = [i[1] for i in Pib_per]

    #criacao do grafico com os dados posteriores
    plt.plot([i[0] for i in Pib_per],Pib_percapita)

    #criação dos nomes da labels 
    plt.xlabel('Ano')
    plt.ylabel('PIB per capita anual')

    #criação do titulo para o gráfico
    plt.title('Grafico capita anual')

    #cria uma grelha atrás do grafico
    plt.grid(True)

    #mostra o gráfico
    plt.show()

#metodo para mostrar graficos do Rendimento nacional com os dados da base de dados
#param @Rn 
def getGraficoRendimento_Nacional(Rn):

    #selecciona o campo i[1] e corre todas as linhas da lista Rn que contem rendimento nacional
    Rnacional = [i[1] for i in Rn]

    #criacao do grafico com os dados posteriores
    plt.plot([i[0] for i in Rn],Rnacional)

    #criação dos nomes da labels 
    plt.xlabel('Ano')
    plt.ylabel('Rendimento nacional bruto per capita anual')

    #criação do titulo para o gráfico
    plt.title('Grafico R nacional')

    #cria uma grelha atrás do grafico
    plt.grid(True)

    #mostra o gráfico
    plt.show()

#metodo para mostrar graficos do Rendimento disponivel com os dados da base de dados
#param @Rd     
def getGraficoRendimento_Disponivel(Rd):

    #selecciona o campo i[1] e corre todas as linhas da lista Rd que contem rendimento disponivel
    Rdisponivel = [i[1] for i in Rd]

    #criacao do grafico com os dados posteriores
    plt.plot([i[0] for i in Rd],Rdisponivel)

    #criação dos nomes da labels 
    plt.xlabel('Ano')
    plt.ylabel('Rendimento disponivel bruto per capita anual')

    #criação do titulo para o gráfico
    plt.title('Grafico R disponivel')

    #cria uma grelha atrás do grafico
    plt.grid(True)

    #mostra o gráfico
    plt.show()

#metodo para mostrar graficos do Remuneração percapita com os dados da base de dados
#param @Rp 
def getGraficoRemuneracao_Percapita(Rp):

    #selecciona o campo i[1] e corre todas as linhas da lista Rp que contem rendimento anuais
    Ranuais = [i[1] for i in Rp]

    #criacao do grafico com os dados posteriores
    plt.plot([i[0] for i in Rp],Ranuais)

    #criação dos nomes da labels 
    plt.xlabel('Ano')
    plt.ylabel('Remuneracoes per capita anual')

    #criação do titulo para o gráfico
    plt.title('Grafico R anuais')

    #cria uma grelha atrás do grafico
    plt.grid(True)

    #mostra o gráfico
    plt.show()


